/**
 * 渲染系统注册器
 * 
 * 职责：
 * 1. 集中管理所有渲染系统
 * 2. 控制渲染系统的注册顺序
 * 3. 提供渲染系统的批量注册接口
 * 
 * 使用方式：
 * - 在 WorldSystem.init() 中调用 registerRenderSystems()
 * - 添加新渲染系统时，只需在此文件中添加，无需修改 WorldSystem
 * 
 * @author AI Assistant
 * @date 2025-12-02
 */

import type { WorldSystem } from "../worldSystem";
import { renderSystem } from "./renderSystem";
import { CommandExecutionSystem } from "./commandExecutionSystem";
import { Log } from "../../../core/logger/LoggerGlobal";

/**
 * 创建命令执行系统实例
 */
const commandExecutionSystem = new CommandExecutionSystem();

/**
 * 注册所有渲染系统
 * 
 * @param world 世界系统
 */
export function registerRenderSystems(world: WorldSystem): void {
    Log.styled('🎨 注册渲染系统（60 FPS）', 'medium');
    
    // ✅ 按顺序注册渲染系统
    // ⚠️ 注意：渲染系统的注册顺序非常重要！
    // 
    // 推荐顺序：
    // 1. 命令执行系统（优先级最高）
    // 2. 插值渲染系统（必须在其他渲染之前）
    // 3. 主渲染系统
    // 4. UI 渲染系统（最后）
    
    // 1. 命令执行系统（必须第一个执行）
    world.add(commandExecutionSystem);
    Log.ecs.debug('✅ 注册: CommandExecutionSystem');
    
    // 2. 插值渲染系统
    // world.add(interpolatedRenderSystem);
    
    // 3. 主渲染系统
    world.add(renderSystem);
    Log.ecs.debug('✅ 注册: RenderSystem');
    
    // 4. UI 渲染系统
    // world.add(uiRenderSystem);
    
    Log.ecs.info('渲染系统注册完成');
}

/**
 * 条件注册渲染系统（根据配置）
 * 
 * @param world 世界系统
 * @param config 配置对象
 */
export function registerRenderSystemsWithConfig(
    world: WorldSystem,
    config: {
        enableCommandExecution?: boolean;
        enableInterpolation?: boolean;
        enableUI?: boolean;
        enableBasicRender?: boolean;
    } = {}
): void {
    Log.styled('🎨 注册渲染系统（配置模式）', 'medium');
    
    let registeredCount = 0;
    
    // 命令执行系统（默认启用）
    if (config.enableCommandExecution !== false) {
        world.add(commandExecutionSystem);
        Log.ecs.debug('✅ 注册: CommandExecutionSystem');
        registeredCount++;
    }
    
    // ✅ 根据配置条件注册插值渲染
    // if (config.enableInterpolation !== false) {
    //     world.add(interpolatedRenderSystem);
    //     Log.ecs.debug('注册: InterpolatedRenderSystem');
    //     registeredCount++;
    // }
    
    // 主渲染系统
    if (config.enableBasicRender !== false) {
        world.add(renderSystem);
        Log.ecs.debug('✅ 注册: RenderSystem');
        registeredCount++;
    }
    
    // ✅ 根据配置条件注册 UI 渲染
    // if (config.enableUI !== false) {
    //     world.add(uiRenderSystem);
    //     Log.ecs.debug('注册: UIRenderSystem');
    //     registeredCount++;
    // }
    
    Log.ecs.info('渲染系统注册完成', {
        count: registeredCount
    });
}

